package com.sikaryofficial.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sikaryofficial.common.core.constant.Constants;
import com.sikaryofficial.common.core.constant.UserConstants;
import com.sikaryofficial.common.core.utils.StringUtils;
import com.sikaryofficial.common.security.utils.SecurityUtils;
import com.sikaryofficial.system.api.domain.SysRole;
import com.sikaryofficial.system.api.domain.SysUser;
import com.sikaryofficial.system.domain.SysMenu;
import com.sikaryofficial.system.domain.SysMenuNew;
import com.sikaryofficial.system.domain.SysMenuNewSaveReq;
import com.sikaryofficial.system.domain.vo.MetaVo;
import com.sikaryofficial.system.domain.vo.RouterVo;
import com.sikaryofficial.system.domain.vo.TreeSelect;
import com.sikaryofficial.system.mapper.SysMenuNewMapper;
import com.sikaryofficial.system.mapper.SysRoleMapper;
import com.sikaryofficial.system.mapper.SysRoleMenuMapper;
import com.sikaryofficial.system.service.ISysMenuNewService;
import com.sikaryofficial.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 菜单 业务层处理
 * 
 * @author ruoyi
 */
@Service
public class SysMenuNewServiceImpl implements ISysMenuNewService
{

    @Autowired
    private SysMenuNewMapper menuNewMapper;

    /**
     * 根据国家查询系统菜单列表
     * 
     * @param countryCode 国家编码
     * @return 菜单列表
     */
    @Override
    public List<SysMenuNew> selectMenuList(String countryCode)
    {
        return menuNewMapper.selectList(new QueryWrapper<SysMenuNew>()
                .eq("parent_id", 0L)
                .eq("country_code", countryCode)
                .eq("deleted_version", 0L));
    }

    /**
     * 根据国家查询系统菜单列表
     *
     * @param countryCode 国家编码
     * @return 菜单列表
     */
    @Override
    public List<SysMenuNew> selectMenuListByIsoCode(String isoCountryCode)
    {
        return menuNewMapper.selectList(new QueryWrapper<SysMenuNew>()
                .eq("parent_id", 0L)
                .eq("iso_country_code", isoCountryCode)
                .eq("deleted_version", 0L));
    }

    @Override
    public List<SysMenuNew> selectMenuList(Long parentId) {
        return menuNewMapper.selectList(new QueryWrapper<SysMenuNew>().eq("visible", 0).eq("parent_id", parentId).eq("deleted_version", 0L));
    }

    @Override
    public List<SysMenuNew> selectMenuListByCountryName(String countryName) {
        return menuNewMapper.selectList(new QueryWrapper<SysMenuNew>().eq("deleted_version", 0L).eq(StringUtils.isNotEmpty(countryName), "country_name", countryName));
    }

    @Override
    public void saveOrUpdate(SysMenuNew sysMenuNew) {
        if (Objects.nonNull(sysMenuNew.getMenuId())) {
            menuNewMapper.update(sysMenuNew, new QueryWrapper<SysMenuNew>().eq("menu_id", sysMenuNew.getMenuId()));
        }else {
            menuNewMapper.insert(sysMenuNew);
        }
    }
}
